闲话 22.8.5

闲话

鲜花

先贴上今天的歌
从昨天开始就想了 果然就该是《命运》啊

運命

空っと乾いた地面に
往干涸的地面上
冷水をかけてみる
泼洒冷水
拾ったパーツで
用捡起的零件
組み立てたプロペラ機
组装起一个螺旋桨式飞机
一緒に乗ろうねなんて
下午三点
話した午後三時
对你说“我们一起坐上这架飞机吧”
高架下で座り込んだ偉い人
呆坐在高架桥下的伟人
はじめまして私右腕を
大小姐 初次见面
担当しますわお嬢さん?
以后就让我来担当您的右手吧
生憎さ この心臓は
很遗憾 我这颗心
誰かの物じゃ無いんだ
并不属于任何人
綺麗に逝くには汚い生を知りすぎた
尽管想要一个圆满美丽的结局 然而却已见过太多肮脏的生命

注意事項はよくよく読んで
请仔细阅读注意事项
後悔だけしないでおいて?
请千万不要留下后悔?
安全圏 湧く観戦者
在安全范围内 涌现出许多观战者
絶対は無い歓楽街
绝不存在欢乐街
ありきたりな筋書きは燃やそうか
把这平常的梗概燃烧殆尽吧
可視化した己の鼓動
肉眼可视的自己的心跳
選べぬジョハリの窓
无法选定的乔哈里视窗
不確かなまま継いだ遺伝子
遗传到的并不确定的基因

憎み合って
它们相互憎恨着
愛し合っている
又相爱着
夢に見た結末は
梦中梦见的结局
恐しくも運命のように
恐怕 如同命运一般
変えられないのだから
无法改变
ひとつになる
结而为一
ひとつになる
结而为一
ひとつになる
结而为一

転んだ反動咄嗟に袖口を掴み取る
摔倒的瞬间 条件反射般抓紧了你的袖口
拾ったパーツが宙に舞う一時
捡起的零件 一时飞散在空中
白んだ地面に1人で倒れ込む物語
这是关于一个人摔倒在纯白地面上的故事
そんなもんは影法師に捨ててゆけ
这样的事情 就一一舍弃到漆黑身影中
ろくでなしの息子を持たれて
拖着个毫无出息的儿子
さぞかし大変でしょうに
想必让生活更加困难了吧
付かず離れず繰り返しては
不断重复着分分合合
勘当を言い出せずにいるんだな
还是舍不得断绝父子关系吧
正論だって時には空虚
所谓的正确 有时也尽显空虚
大枚だけ叩いておいで?
甩出你大把的钞票吧?
無償の愛など砂上の楼閣
无偿的爱就像是建造在砂砾上的阁楼
君の融資をさ見届けたいんだよ
我想看到你融资后的运转
絡まり続けた意図を断ち切れば
当不断交织的意图被中断
痛みの手綱 上手に握れれば
如果能好好地握住痛苦的渔网
腐食したオゾンから
便能从腐败的臭氧层中
抜けられるだろう
脱颖而出吧

奪い合って
相互争夺
与え合っていた
相互给予
病弱な結末は
若要去算计
計り知るも
虚弱的结局
軽薄に視えて
便会显得肤浅
算盤を踏み付けた
将算盘踩碎
ひとつになる
结而为一
ひとつになる
结而为一
ひとつになる
结而为一
運命は——
所谓命运——

我实在是分不开段了啊啊啊
因为bpm很快所以完全唱不得 只能说我可以哼出来曲的部分
“運命は——”(高音)(断气)(无力的本音)
♪ 奪い合って ~ 与え合っていた ~ ♪
突然发现昨天做的题的名字是凉宫的歌诶

Star Way To Heaven
God Knows
Lost My Music

口胡做法真爽(

感觉我的页面css还需要再调调
有好心的读者在评论里反映一下有哪些地方不好看吗
虽然说了也不一定改

对顶堆

我要切kdt所以今天写点水东西

对顶堆,顾名思义,是两个拼在一起用的堆。就像对顶队列一样,他可以动态维护序列上在特定值域范围的信息,像是中位数、第k小之类的。

首先说说中位数。
拿个定义来:奇数个顺序排列的数字的中位数为第 \(\frac {n+1} 2\) 个数字,偶数个则是第 \(\frac n 2\) 和第 \(\frac n 2+1\) 个数字的平均数。
我们让两个堆的堆顶分别维护第 \(\frac n 2\) 和第 \(\frac n 2+1\) 个数字,其中大根堆维护第 \(1 - \frac n 2\) 个数字,小根堆维护第 \(\frac n 2 + 1 - n\) 个数字。当总数为奇数时,两个堆的大小不相等,其中一个比另一个大1,输出更大的堆的堆顶即可。当总数为偶数时,取两个堆堆顶的平均数即可。

封装得很好(?)的堆
struct topping_queue {
	priority_queue<int, vector<int>, less<int> > le;
	priority_queue<int, vector<int>, greater<int> > gr;
	
	void push(int val) { 
		if (le.empty() or val <= le.top()) le.push(val);
		else gr.push(val);
		if (le.size() < gr.size()) le.push(gr.top()), gr.pop();
		if (le.size() - gr.size() > 1) gr.push(le.top()), le.pop();
	} 
	
	int get_mid_less() {
		return le.top();
	} 
	int get_mid_greater() {
		return gr.top();
	} 
	int get_mid() {
		if (check_sum_even()) {
			return (get_mid_less() + get_mid_greater()) >> 1;
		} else return get_mid_less();
	} 
	
	bool check_sum_even() {
		return (le.size() == gr.size());
	} 
	bool check_greater_exist() {
		return gr.size();
	} 
} ;

基本维护思路和对顶队列一样,钦定大根堆的大小大于小根堆的大小,当堆大小违法时对弹即可。单次插入复杂度 \(O(\log n)\),查询复杂度 \(O(1)\)
使用对顶堆求第 \(k\) 小的思路类似。我们甚至可以删去小根堆,只维护前 \(k\) 小值。

可以通过维护某个数存在性的方式懒惰删除。具体的,我们记录两个变量 \(del_{max}, del_{min}\),分别表示大根堆与小根堆内已被删除数字的数量。当需要删除一个数时,比较其与中位数的关系,并将其所在堆的 \(del\) 自增,通过堆大小减 \(del\) 的方式计算堆真实大小,大小违法时对弹。并记录具体删除的数字,在真正弹出该数字时减少对应堆的 \(del\) 值,均摊似乎是 \(O(\log n)\) 的。

posted @ 2022-08-05 19:46  joke3579  阅读(73)  评论(4编辑  收藏  举报